package com.demo.java.OD301_350.OD349;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【通过软盘拷贝文件(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146163274
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt(); // 文件数量
        int[] nums = new int[n]; // 存储每个文件的大小
        for (int i = 0; i < n; i++) {
            nums[i] = input.nextInt(); // 逐个读取文件大小
        }

        // 计算最大存储容量，即最大块数
        int W = 1474560 / 512; // 每个块的大小是512字节

        // dp[i][j]表示前i个文件存储在容量为j的空间中的最大文件总大小
        int[][] dp = new int[n + 1][W + 1];

        // 动态规划求解最大值
        for (int i = 1; i <= n; i++) {
            int size = (int) Math.ceil(nums[i - 1] / 512.0); // 当前文件大小转化为占用块数
            int value = nums[i - 1]; // 当前文件的大小

            for (int j = 0; j <= W; j++) { // 遍历背包容量
                if (size <= j) {
                    // 如果当前文件大小小于等于当前背包容量，可以选择将该文件放入背包
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - size] + value);
                } else {
                    // 如果当前文件大小大于当前背包容量，无法放入该文件，只能选择不放入该文件
                    dp[i][j] = dp[i - 1][j];
                }
            }
        }

        System.out.println(dp[n][W]); // 输出最终能够存储的最大文件大小
    }
}